#ifndef __HUMANMANAGER_H__
#define __HUMANMANAGER_H__

#include <Ogre.h>
#include <btBulletDynamicsCommon.h>
#include <list>
#include "BtOgrePG.h"
#include "BtOgreGP.h"
#include "BtOgreExtras.h"
#include "Human.h"
#include "Zombie.h"

class HumanManager : public Ogre::Singleton<HumanManager> {

 private:

  // Atributos Bullet --------------------------------------------------

  btDiscreteDynamicsWorld* _pWorld;
  btCylinderShape* _pHumanCollisionShape;

  // Atributos Ogre ----------------------------------------------------

  Ogre::SceneManager* _pSceneManager;

  // Otros atributos ---------------------------------------------------

  Ogre::RaySceneQuery* _pShootRaySceneQuery; // Rayo para disparar
  Human* _pHuman; // Personaje jugador

 public:

  // Constructores y destructores --------------------------------------

  HumanManager(btDiscreteDynamicsWorld* pWorld,
               Ogre::SceneManager* pSceneManager,
               OpenSteer::Vec3 position);
  ~HumanManager();

  // Ogre::Singleton ---------------------------------------------------

  static HumanManager& getSingleton();
  static HumanManager* getSingletonPtr();

  // Update ------------------------------------------------------------

  // Llamar al metodo update en todos los zombis
  void update(const float currentTime, const float elapsedTime);

  // Métodos propios ---------------------------------------------------
  Human* human() { return _pHuman; }
  void translate(btVector3 translation);
  void lookAt(Ogre::Vector3 targetPoint);
  bool shoot();
};

#endif
